// Boomerangs in main  arama = 4 for normal 5 = for extra
// boomerang sprite class

int boomer_speed  = 6;                                                          // Fireballs speed

void crea_boomer()                                                              // create fireballs
{
    boomerang.createxturas ("sprites/boomerang.dat");
    /* clear boomerang coordinate array */
    for (int i=0;i<3;i++)
    {
        boomerangs[i].activo=false; 
        boomerangs[i].dir=0;    // 0 = para arriba  1= para abajo
        boomerangs[i].angulo=i*45; // sets the start angle
    }
}    

void boomer_fire()
{
   static int iTmpDisparo;                                                      // variable para calcular el tiempo
   int firedelay=350;                                                           // dela for next shot
   if ( (SDL_GetTicks() - iTmpDisparo) < firedelay)  return;                    // sale si es menor, velocidad de disparo en 350
   iTmpDisparo = SDL_GetTicks();                                                // averigua el tiempo transcurrido
   for (int i=0;i<3;i++)                                                        // create shot
    if (boomerangs[i].activo==false)                                                       // if y is 0 start
       {
         Sbumer.play();
          /* basic formation */
         boomerangs[i].activo=true;
         boomerangs[i].y=int(popolon.y)-32;                                     //first of all set y position
         boomerangs[i].x=int(popolon.x);                                        // x
         boomerangs[i].dir=0;                                                   // boomerangs go up
         break;                                                                 // loop exit
        } 
}
void boomer_move (double mappos)
{  //fs
    SDL_Rect recta; // for weapon
    SDL_Rect rectb; // for enemys

  for (int i=0;i<arma-2;i++)                                                    // arma normal is 4 -2 = 2 ingenious not??
    if (boomerangs[i].activo==true)                                                     // if y>0 
    { //if 1
     if (boomerangs[i].dir==0 ) boomerangs[i].y-=boomer_speed;                  // go up
     if (boomerangs[i].dir==1 ) boomerangs[i].y+=boomer_speed;                  // go down
      if (arma==4)
       { // if 2
        boomerangs[i].x=int(popolon.x);                                             // move x
        if (boomerangs[i].y<popolon.y-200) boomerangs[i].dir=1;                  // go down??
        if (boomerangs[i].y>popolon.y)                                          // si regresa a popolon
         {                              
          boomerangs[i].activo=false;                                           // desactivo el esprite
          }          
        boomerangs[i].angulo+=8;
        if (boomerangs[i].angulo > 360)  boomerangs[i].angulo=0;                // check rotation
        boomerang.rotacionZ=boomerangs[i].angulo;
        boomerang.x= boomerangs[i].x;
        boomerang.y= boomerangs[i].y;
        boomerang.pinta();                                                          // draw rigth fireball
       } // if 2
      if (arma==5)                                                               // arrow formation
       { //if 3
        boomerangs[i].x=int(popolon.x);                                             // move x
        if (boomerangs[i].y < popolon.y-200) boomerangs[i].dir=1;                  // go down??
        if (boomerangs[i].y>popolon.y)
        {
          boomerangs[i].activo=false;                                           // desactiva el sprite
        }          
        boomerangs[i].angulo+=8;
        if (boomerangs[i].angulo>360)  boomerangs[i].angulo=0;
        boomerang.rotacionZ=boomerangs[i].angulo;
        boomerang.x= boomerangs[i].x;
        boomerang.y= boomerangs[i].y;
        boomerang.pinta();                                                       // paint right ball
       } // if 3
  
   /* comprueba colisiones con objetos simples*/
       if (medusaestado==1)
         if (boomerang.collision(&medhead.rect))
            {
                boomerangs[i].activo=false;
                medusavida--;
                Sbosshit.play();
            }
        if (muerteestado==1)
            if (boomerang.collision(&deathhead.rect))
                {
                    boomerangs[i].activo=false;
                    muertevida--;
                    Sbosshit.play();
            }
      /* Weapon option */ 
      if (optionw.visible==true) 
        if (boomerang.collision(&optionw.rect))                                     
         {
            if (woptiondir<1) woptiondir=1;
            else woptiondir=-1;
            Soptionclik.play();
            if (optionw.animpos<2) optionw.animpos=2.0;                         
            else optionw.animpos+=1;
            if (optionw.animpos==3) optionw.animpos=4;                          // no deja doble flecha
            if (optionw.animpos==7) optionw.animpos=8;                          // esspadas
            if (optionw.animpos==9) optionw.animpos=0;                          // flechas de fuego
            if (optionw.animpos>9) optionw.animpos=0; 
            boomerangs[i].activo=false;
          } // if       
      /* collison with option */
      if (option.visible==true  )
        if (boomerang.collision(&option.rect) )                                     
           {
            if (optiondir<1) optiondir=1;
            else optiondir=-1;
            Soptionclik.play();
            option.animpos++;
            if (option.animpos>4) option.animpos=0;
            option.animstart=int(option.animpos);
            boomerangs[i].activo=false;                                               // turn sprite off
           }                                                                        

    /* chequea colisiones con objetos que tienen matriz*/
//    for (int i=0;i<arma-2;i++)
     for (int a=0;a<6;a++)
      {
       if (boomerangs[i].activo==true)
       {
        recta.x=boomerangs[i].x;recta.y=boomerangs[i].y;recta.w=boomerang.w;recta.h=boomerang.h;                     

        /* colision con nubes */
        if (a<3 && cloudss[a].hit==false)                                             
        {
            rectb.x=int(cloudss[a].x);rectb.w=clouds.w;
            rectb.y=int(cloudss[a].y);rectb.h=clouds.h;
            if (boomerang.colbox(&recta,&rectb))
            {
                Sras.play();
                cloudss[a].hit=true;
                cloudss[a].dir=0;
                if (cloudss[a].x>(popolon.x)+10) cloudss[a].dir=-((cloudss[a].x / popolon.x)  );
                if (cloudss[a].x<(popolon.x)-10) cloudss[a].dir= (popolon.x /cloudss[a].x) ;
            }
        } /* clouds collision check end */
        
        /* bats */
        if (batss[a].activo==true )
        {
         rectb.x=int(batss[a].x);rectb.y=int(batss[a].y);rectb.w=32;rectb.h=32;
         if (boomerang.colbox(&recta,&rectb) && recta.y>0 )                                       // if collision exists 
          {
            for (int d=0;d<128;d++) 
             if (rass[d].activo==false) 
              {
               rass[d].activo=true;
               rass[d].y=int(batss[a].y);                                           // fire death on y 
               rass[d].x=int(batss[a].x);                                           // fire death on x 
               break;
              } // for
            batss[a].activo=false;                                                     // clear bat in pos
            puntos+=100;                                                         // suma puntos
           } //  if
         } /* check end */
        if (batss_spr[a].activo==true )
        {
         rectb.x=int(batss_spr[a].x);rectb.y=int(batss_spr[a].y);rectb.w=32;rectb.h=32;
         if (boomerang.colbox(&recta,&rectb) && recta.y>0 )                                       // if collision exists 
          {
            for (int d=0;d<128;d++) 
             if (rass[d].activo==false) 
              {
               rass[d].activo=true;
               rass[d].y=int(batss_spr[a].y);                                           // fire death on y 
               rass[d].x=int(batss_spr[a].x);                                           // fire death on x 
               break;
              } // for
            batss_spr[a].activo=false;                                                     // clear bat in pos
            puntos+=100;                                                         // suma puntos
           } //  if
         } /* check end */
        if (batss_spl[a].activo==true )
        {
         rectb.x=int(batss_spl[a].x);rectb.y=int(batss_spl[a].y);rectb.w=32;rectb.h=32;
         if (boomerang.colbox(&recta,&rectb) && recta.y>0 )                                       // if collision exists 
          {
            for (int d=0;d<128;d++) 
             if (rass[d].activo==false) 
              {
               rass[d].activo=true;
               rass[d].y=int(batss_spl[a].y);                                           // fire death on y 
               rass[d].x=int(batss_spl[a].x);                                           // fire death on x 
               break;
              } // for
            batss_spl[a].activo=false;                                                     // clear bat in pos
            puntos+=100;                                                         // suma puntos
           } //  if
         } /* check end */
        if (batss_zz[a].activo==true )
        {
         rectb.x=int(batss_zz[a].x);rectb.y=int(batss_zz[a].y);rectb.w=32;rectb.h=32;
         if (boomerang.colbox(&recta,&rectb) && recta.y>0 )                                       // if collision exists 
          {
            for (int d=0;d<128;d++) 
             if (rass[d].activo==false) 
              {
               rass[d].activo=true;
               rass[d].y=int(batss_zz[a].y);                                           // fire death on y 
               rass[d].x=int(batss_zz[a].x);                                           // fire death on x 
               break;
              } // for
            batss_zz[a].activo=false;                                                     // clear bat in pos
            puntos+=100;                                                         // suma puntos
           } //  if
         } /* check end */
       
       if (bones[a].activo==true)
        {
         /* bugs rect */
         rectb.x=int(bones[a].x);
         rectb.y=int(bones[a].y);
         rectb.w=32;
         rectb.h=32;    
         /* check colision */      
         if (boomerang.colbox(&recta,&rectb) && bones[a].assm==true)                                     
          {
            bones[a].hit++;
            bones[a].assm=false;
            bones[a].head=bones[a].x;
            bones[a].body=bones[a].x;
            if (bones[a].hit==3)  // MAX HITS 
            {
                Sras.play();
                for (int b=0;b<128;b++) 
                 if (rass[b].activo==false) 
                 {
                  rass[b].activo=true;
                  rass[b].y=int(bones[a].y);
                  rass[b].x=int(bones[a].x);
                  break;
                 }
                bones[a].activo=false;
                bones[a].hit=0;                                                                                               
                puntos+=100;
            }
          } // if  sword     
         } // if bones
       
       
       
       if (bugs[a].activo==true)
       {
       rectb.x=bugs[a].x;rectb.y=bugs[a].y;rectb.w=32;rectb.h=32;    
        if (boomerang.colbox(&recta,&rectb)&& recta.y>0)                                     
         {
           for (int d=0;d<128;d++) 
            if (rass[d].activo==false) 
             {
              rass[d].activo=true;
              rass[d].y=bugs[a].y;
              rass[d].x=bugs[a].x;
              break;
             }
           bugs[a].activo=false; // desactiva el sprite
           bugs[a].dir=0;
           puntos+=100;  
         }
       } /* end check */           
       if (bubless[a].activo==true)
       {
       rectb.x=bubless[a].x;rectb.y=bubless[a].y;rectb.w=32;rectb.h=32;    
        if (boomerang.colbox(&recta,&rectb)&& recta.y>0)                                     
         {
           for (int d=0;d<128;d++) 
            if (rass[d].activo==false) 
             {
              rass[d].activo=true;
              rass[d].y=bubless[a].y;
              rass[d].x=bubless[a].x;
              break;
             }
           bubless[a].activo=false; // desactiva el sprite
           puntos+=100;  
         }
       } /* end check */
     
     /* collision with Knights */
     if (knights[i].activo==true)
     {
      rectb.x=knights[i].x;rectb.y=knights[i].y;rectb.w=32;rectb.h=32; 
      if (boomerang.colbox(&recta,&rectb) && recta.y>0)                                     
        {
          boomerangs[i].activo=false;                                                    // turn sprite off   
          knights[i].hits+=1;                                                      // inc knight hits
          if (knights[i].hits>3)
          {
           for (int b=0;b<128;b++) 
            if (rass[b].activo==false) 
             {
              rass[b].activo=true;
              rass[b].y=knights[i].y; // x ras position
              rass[b].x=knights[i].x; // y ras position
              break;
             }
            puntos+=500;
            knights[i].activo=false;                                                   // turn sprite off
            knights[i].hits=0;                                                     // resert hit counter      
           }// if end
        }   
      } /* check end */     
    } //iff
   }//for
} // if 1


}
